
package com.mazaiting.api.config;

import com.mazaiting.api.decoder.CustomizeErrorDecoder;
import feign.Logger;
import feign.codec.ErrorDecoder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * Feign相关配置类
 */
@Configuration
public class FeignConfig {
//    /**
//     * 让DispatcherServlet向子线程传递RequestContext
//     *
//     * @param servlet servlet
//     * @return 注册bean
//     */
//    @Bean
//    public ServletRegistrationBean<DispatcherServlet> dispatcherRegistration(DispatcherServlet servlet) {
//        servlet.setThreadContextInheritable(true);
//        return new ServletRegistrationBean<>(servlet, "/**");
//    }

//    /**
//     * 覆写拦截器，在feign发送请求前取出原来的header并转发
//     *
//     * @return 拦截器
//     */
//    @Bean
//    public RequestInterceptor requestInterceptor() {
//        return (template) -> {
//            RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
//            if (requestAttributes != null) {
//                ServletRequestAttributes attributes = (ServletRequestAttributes) requestAttributes;
//                HttpServletRequest request = attributes.getRequest();
//                //获取请求头
//                Enumeration<String> headerNames = request.getHeaderNames();
//                if (headerNames != null) {
//                    while (headerNames.hasMoreElements()) {
//                        String name = headerNames.nextElement();
//                        String values = request.getHeader(name);
//                        //将请求头保存到模板中
//                        template.header(name, values);
//                    }
//                }
//            }
//        };
//    }


    /**
     * 输出全部日志
     *
     * @return 日志级别
     */
    @Bean
    public Logger.Level feignLogger() {
        return Logger.Level.FULL;
    }


    /**
     * 自定义异常解码器
     * @return 异常解码器
     */
    @Bean
    public ErrorDecoder errorDecoder() {
        return new CustomizeErrorDecoder();
    }
}

